﻿// // int [,] matrix1 = new int[2,3]{
// //     {1,2,3},
// //     {4,5,6},
// // };

// // int [,] matrix2 = {
// //     {7,8},
// //     {9,10},
// //     {11,12},
// // };

// // int [,] matrix3 = new int[3,2];
// // matrix3[0,0] = 100;
// // matrix3[1,1] = 200;

// // Console.WriteLine("matrix1:");
// // PrintArray(matrix1);
// // Console.WriteLine("matrix2:");
// // PrintArray(matrix2);
// // Console.WriteLine("matrix3:");
// // PrintArray(matrix3);

// // int [,] matrix = new int[4,5];
// // Console.WriteLine($"总元素数量:{matrix.Length}");
// // int rows = matrix.GetLength(0);//行数
// // int cols = matrix.GetLength(1);//列数
// // Console.WriteLine($"行数:{rows},列数：{cols}");

// // int[,] matrix4 = {
// //     {5,9,2},
// //     {7,1,3},
// //     {4,8,6}
// // };

// // int rowIndex = 0;
// // int a = 1;
// // int b = 2;//三行

// // int[] temRow = new int[matrix4.GetLength(0)];
// // int[] x = new int[matrix4.GetLength(0)];
// // int[] y = new int[matrix4.GetLength(0)];

// // for(int j = 0; j < matrix4.GetLength(0); j++){ 
// //     object tempRow = null;
// //     temRow[j] = matrix4[rowIndex,j];
// //     x[j] = matrix4[a,j];
// //     y[j] = matrix4[b,j];
// // }

// // Array.Sort(temRow);//排序
// // Array.Sort(x);
// // Array.Sort(y);

// // for(int j = 0; j < temRow.Length; j++){ 
// //     matrix4[rowIndex,j] = temRow[j];
// //     matrix4[a,j] = x[j];
// //     matrix4[b,j] = y[j];
// // }

// // Console.WriteLine("排序后：");
// // PrintArray(matrix4);

// // int[,]m5 = {
// //     {1,2},
// //     {3,4},
// //     {5,6}
// // };
// // int[] temp1 = {m5[0,0],m5[0,1]};
// // Array.Reverse(temp1);
// // m5[0,0] = temp1[0];
// // m5[0,1] = temp1[1];
// // Console.WriteLine("倒叙后：");
// // PrintArray(m5);

// // static void PrintArray(int[,] arr){
// //     for(int i = 0; i < arr.GetLength(0); i++){
// //     for(int j = 0; j < arr.GetLength(1); j++){//GetLength传入空值时会提示Index was outside the bounds of the array
// //         Console.Write(arr[i,j].ToString().PadLeft(4));
// //     }
// //     Console.WriteLine();
// //     }
// // }

// Animal[] animals = new Giraffe[2];
// Giraffe[] girs = new Giraffe[]{new Giraffe(), new Giraffe()};
// Animal [] ani = girs;
// Animal a0 = ani[0];

// ani[2] = new Animal();

// class Animal{ }

// class Giraffe : Animal{ }

Giraffe[] giraffes = new Giraffe[]{
    new Giraffe(),
    new Giraffe()
};
//协变：将Giraffe[]赋值给Animal[]
Animal[] animals = giraffes;
//读取：按animals类型读取，每个元素实际都是giraffe
Console.WriteLine(animals[0].Speak());
try{
    animals[1] = new Dog();
}
catch(ArrayTypeMismatchException ex){
    Console.WriteLine("写入失败，类型不匹配：" + ex.GetType().Name);
}
Console.WriteLine("giraffes[1]是：" + (giraffes[1] is Giraffe));


class Animal{public virtual string Speak() => "??"; }
class Giraffe : Animal{public override string Speak() => "咯咯"; }
class Dog : Animal{public override string Speak() => "汪汪"; }